<?php

require_once 'classes/Media.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';

/*
 * Classe de service CRUD pour manipuler les enregistrements de Media
 * @author Alain 05.06.12
 */
class SCmedia implements SCinterface{
    
    private $db;

    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    /**
     * Ajoute un média à la base de données
     * @param Media un média à ajouter
     * @return Media un média ajouté 
     */
    public function ajouter($unMediaAMemoriser) {
       $unMediaMemorise = null;
        try{
            $query =  $this->db->prepare("INSERT INTO media " .
                   "(url, date, rapport_date, plainte_id, personne_id, animal_id) VALUES(" .
                   ":url, :date, :rapport_date, :plainte_id, :personne_id, :animal_id);");

            $query->execute(array(
                   'url'                => $unMediaAMemoriser->getUrl(),
                   'date'               => $unMediaAMemoriser->getDate(),
                   'rapport_date'       => $unMediaAMemoriser->getRapport_date(),
                   'plainte_id'         => $unMediaAMemoriser->getPlainte_id(),
                   'personne_id'        => $unMediaAMemoriser->getPersonne_id(),
                   'animal_id'          => $unMediaAMemoriser->getAnimal_id()
                ));
                $unMediaMemorise = $unMediaAMemoriser;
                $query->closeCursor();
        }
        catch(PDOException $e){
           echo ("Media non ajouté: ".$e->getMessage());
           $unMediaMemorise = null;
        }
        return $unMediaMemorise;
   }
    /**
     * Methode permettant de modifier un media
     * @param Media media à modifier
     * @return Message
     */
    public function modifier($unMediaAModifier){
        try{
            
           $query =  $this->db->prepare("UPDATE media SET date = :date, rapport_date = :rapport_date, plainte_id = :plainte_id, personne_id = :personne_id, animal_id = :animal_id WHERE url = :url;");

           $query->execute(array(
                   'url'          => $unMediaAModifier->getUrl(),
                   'date'         => $unMediaAModifier->getDate(),
                   'rapport_date' => $unMediaAModifier->getRapport_date(),
                   'plainte_id'   => $unMediaAModifier->getPlainte_id(),
                   'personne_id'  => $unMediaAModifier->getPersonne_id(),
                   'animal_id'    => $unMediaAModifier->getAnimal_id()
               ));

                   $this->db->query($query->queryString);

           
           }
                catch(PDOException $e)
        {
            print($e->getMessage());
            return new Message("Media non modifié");
        }
               return $unMediaAModifier;
    }
    /**
     * Service Croud permettant de supprimer un media
     * @param string url du Media à supprimer
     * @return Boolean True si le média a été supprimé, false sinon
     */
    public function supprimer($urlMediaASupprimer){
        $unMediaSupprime = false;
        try{
            $query = "DELETE FROM media WHERE url='".$urlMediaASupprimer."';";
                   
            $this->db->query($query);
            $unMediaSupprime = true;
            $message = new Message("Media supprimé");
        }
                
        catch(PDOException $e){
            print($e->getMessage());
            $message = new Message("Media non supprimée");
        }
        return $unMediaSupprime;
    }
   
    /**
     *
     * @param Personn mediaALister de recherche sous forme d'objet Media
     * @return un tableau d'objet Media
     */
    public function lister($mediaALister){
        try{
         

            $sql="SELECT * FROM media ";
            $sql_Where="WHERE";
            if($mediaALister!=NULL)
            {
                
                if($mediaALister->getAnimal_id()!=NULL)
                    $sql_Where.=" animal_id = '".$mediaALister->getAnimal_id()."' AND ";
                if($mediaALister->getPersonne_id()!=NULL)
                    $sql_Where.=" personne_id = '".$mediaALister->getPersonne_id()."' AND ";
                if($mediaALister->getPlainte_id()!=NULL)
                    $sql_Where.=" plainte_id = '".$mediaALister->getPlainte_id()."' AND ";
                if($mediaALister->getUrl()!=NULL)
                    $sql_Where.=" url = '".$mediaALister->getUrl()."' AND ";
                if($mediaALister->getRapport_date()!=NULL)
                    $sql_Where.=" url = '".$mediaALister->getRapport_date()."' AND ";
            }         


            $sql_Where = substr($sql_Where,0,-5);
            $sql.=$sql_Where." order by animal_id;";
            $lesMediasTrouves=NULL;
            $unMediaLu=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch())
            {   
                $unMediaLu = new Media($row['url'],$row['date'],$row['rapport_date'],$row['plainte_id'],$row['personne_id'],$row['animal_id']);
               
                    $lesMediasTrouves[]=$unMediaLu;
            }                
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesMediasTrouves=NULL;
        }
        return $lesMediasTrouves;
    }
  
}

?>
